(function(f){
        if(typeof exports==="object"&&typeof module!=="undefined"){
            module.exports=f()}else if(typeof define==="function"&&define.amd){define([],f)
        }else{var g;if(typeof window!=="undefined"){g=window}else if(typeof global!=="undefined"){
            g=global
        }else if(typeof self!=="undefined"){
            g=self
        }else{
            g=this
        }
            g.protocolCheck = f()
        }
    }
)
(function(){
    var define,module,exports;
    return (function e(t,n,r){
        function s(o,u){
            if(!n[o]){if(!t[o]){
                var a=typeof require=="function"&&require;
                if(!u&&a)return a(o,!0);
                if(i)return i(o,!0);
                var f=new Error("Cannot find module '"+o+"'");
                throw f.code="MODULE_NOT_FOUND",f
            }
                var l=n[o]={
                    exports:{}};
                t[o][0].call(l.exports,function(e){
                    var n=t[o][1][e];
                    return s(n?n:e)},l,l.exports,e,t,n,r)
            }
            return n[o].exports
        }
        var i=typeof require=="function"&&require;
        for(var o=0;o<r.length;o++)s(r[o]);
        return s
    })
    ({1:[function(require,module,exports){

            function _registerEvent(target, eventType, cb) {
                if (target.addEventListener) {
                    target.addEventListener(eventType, cb);
                    return {
                        remove: function () {
                            target.removeEventListener(eventType, cb);
                        }
                    };
                } else {
                    target.attachEvent(eventType, cb);
                    return {
                        remove: function () {
                            target.detachEvent(eventType, cb);
                        }
                    };
                }
            }

            function _createHiddenIframe(target, uri) {
                var iframe = document.createElement("iframe");
                iframe.src = uri;
                iframe.id = "hiddenIframe";
                iframe.style.display = "none";
                target.appendChild(iframe);

                return iframe;
            }

            function openUriWithHiddenFrame(uri, failCb, successCb) {

                var timeout = setTimeout(function () {
                    failCb();
                    handler.remove();
                }, 1000);

                var iframe = document.querySelector("#hiddenIframe");
                if (!iframe) {
                    iframe = _createHiddenIframe(document.body, "about:blank");
                }

                var handler = _registerEvent(window, "blur", onBlur);

                function onBlur() {
                    clearTimeout(timeout);
                    handler.remove();
                    successCb();
                }

                iframe.contentWindow.location.href = uri;
            }

            function openUriWithTimeoutHack(uri, failCb, successCb) {

                var timeout = setTimeout(function () {
                    failCb();
                    handler.remove();
                }, 1000);

                //handle page running in an iframe (blur must be registered with top level window)
                var target = window;
                while (target != target.parent) {
                    target = target.parent;
                }

                var handler = _registerEvent(target, "blur", onBlur);

                function onBlur() {
                    clearTimeout(timeout);
                    handler.remove();
                    successCb();
                }

                window.location = uri;
            }

            function openUriUsingFirefox(uri, failCb, successCb) {
                var iframe = document.querySelector("#hiddenIframe");

                if (!iframe) {
                    iframe = _createHiddenIframe(document.body, "about:blank");
                }

                try {
                    iframe.contentWindow.location.href = uri;
                    successCb();
                } catch (e) {
                    if (e.name == "NS_ERROR_UNKNOWN_PROTOCOL") {
                        failCb();
                    }
                }
            }

            function openUriUsingIEInOlderWindows(uri, failCb, successCb) {
                if (getInternetExplorerVersion() === 10) {
                    openUriUsingIE10InWindows7(uri, failCb, successCb);
                } else if (getInternetExplorerVersion() === 9 || getInternetExplorerVersion() === 11) {
                    openUriWithHiddenFrame(uri, failCb, successCb);
                } else {
                    openUriInNewWindowHack(uri, failCb, successCb);
                }
            }

            function openUriUsingIE10InWindows7(uri, failCb, successCb) {
                var timeout = setTimeout(failCb, 1000);
                window.addEventListener("blur", function () {
                    clearTimeout(timeout);
                    successCb();
                });

                var iframe = document.querySelector("#hiddenIframe");
                if (!iframe) {
                    iframe = _createHiddenIframe(document.body, "about:blank");
                }
                try {
                    iframe.contentWindow.location.href = uri;
                } catch (e) {
                    failCb();
                    clearTimeout(timeout);
                }
            }

            function openUriInNewWindowHack(uri, failCb, successCb) {
                var myWindow = window.open('', '', 'width=0,height=0');

                myWindow.document.write("<iframe src='" + uri + "'></iframe>");

                setTimeout(function () {
                    try {
                        myWindow.location.href;
                        myWindow.setTimeout("window.close()", 1000);
                        successCb();
                    } catch (e) {
                        myWindow.close();
                        failCb();
                    }
                }, 1000);
            }

            function openUriWithMsLaunchUri(uri, failCb, successCb) {
                navigator.msLaunchUri(uri,
                    successCb,
                    failCb
                );
            }

            function checkBrowser() {
                var isOpera = !!window.opera || navigator.userAgent.indexOf(' OPR/') >= 0;
                var ua = navigator.userAgent.toLowerCase();
                return {
                    isOpera   : isOpera,
                    isFirefox : typeof InstallTrigger !== 'undefined',
                    isSafari  : (~ua.indexOf('safari') && !~ua.indexOf('chrome')) || Object.prototype.toString.call(window.HTMLElement).indexOf('Constructor') > 0,
                    isIOS     : /iPad|iPhone|iPod/.test(navigator.userAgent) && !window.MSStream,
                    isChrome  : !!window.chrome && !isOpera,
                    isIE      : /*@cc_on!@*/false || !!document.documentMode // At least IE6
                }
            }

            function getInternetExplorerVersion() {
                var rv = -1;
                if (navigator.appName === "Microsoft Internet Explorer") {
                    var ua = navigator.userAgent;
                    var re = new RegExp("MSIE ([0-9]{1,}[\.0-9]{0,})");
                    if (re.exec(ua) != null)
                        rv = parseFloat(RegExp.$1);
                }
                else if (navigator.appName === "Netscape") {
                    var ua = navigator.userAgent;
                    var re = new RegExp("Trident/.*rv:([0-9]{1,}[\.0-9]{0,})");
                    if (re.exec(ua) != null) {
                        rv = parseFloat(RegExp.$1);
                    }
                }
                return rv;
            }

            module.exports = function(uri, failCb, successCb, unsupportedCb) {
                function failCallback() {
                    failCb && failCb();
                }

                function successCallback() {
                    successCb && successCb();
                }

                if (navigator.msLaunchUri) { //for IE and Edge in Win 8 and Win 10
                    openUriWithMsLaunchUri(uri, failCb, successCb);
                } else {
                    var browser = checkBrowser();

                    if (browser.isFirefox) {
                        openUriUsingFirefox(uri, failCallback, successCallback);
                    } else if (browser.isChrome || browser.isIOS) {
                        openUriWithTimeoutHack(uri, failCallback, successCallback);
                    } else if (browser.isIE) {
                        openUriUsingIEInOlderWindows(uri, failCallback, successCallback);
                    } else if (browser.isSafari) {
                        openUriWithHiddenFrame(uri, failCallback, successCallback);
                    } else {
                        unsupportedCb();
                        //not supported, implement please
                    }
                }
            }

        },{}]},{},[1])(1)
});